<?php
/**
 * DES 64位加密
 * @author ly
 *
 */
class DES {
	public static $key='12345678';
	public static function Encrypt( $text) {
		$size = mcrypt_get_block_size ( 'des', 'ecb' );
		$text = self::pkcs5_pad ( $text, $size );
		$td = mcrypt_module_open ( 'des', '', 'ecb', '' );
		// srand((double)microtime() * 1000000);
		$iv = mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND );
		mcrypt_generic_init ( $td, self::$key, $iv );
		$data = mcrypt_generic ( $td, $text );
		mcrypt_generic_deinit ( $td );
		mcrypt_module_close ( $td );
		$data = base64_encode ( $data );
		return $data;
	}
	
	public static function Decrypt( $encrypted) {
		$encrypted = base64_decode ( $encrypted );
		$td = mcrypt_module_open ( 'des', '', 'ecb', '' );
		// srand((double)microtime() * 1000000);
		$iv = mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND );
		$ks = mcrypt_enc_get_key_size ( $td );
		mcrypt_generic_init ( $td, self::$key, $iv );
		$decrypted = mdecrypt_generic ( $td, $encrypted );
		mcrypt_generic_deinit ( $td );
		mcrypt_module_close ( $td );
		$plain_text = self::pkcs5_unpad ( $decrypted );
		return $plain_text;
	}
	public static function pkcs5_pad($text, $blocksize) {
		$pad = $blocksize - (strlen ( $text ) % $blocksize);
		return $text . str_repeat ( chr ( $pad ), $pad );
	}
	
	public static function pkcs5_unpad($text) {
		$pad = ord ( $text {strlen ( $text ) - 1} );
		if ($pad > strlen ( $text )) {
			return false;
		}
		if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad) {
			return false;
		}
		return substr ( $text, 0, - 1 * $pad );
	}
}